package com.cheung.leetcode.arr;

import java.util.ArrayList;
import java.util.List;

/**
 * @author cheung
 */
public class Code54 {

    public static List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> result = new ArrayList<>();

        int left = 0;
        int right = matrix[0].length - 1;
        int top = 0;
        int bottom = matrix.length - 1;

        while (true) {

            // 从左到右
            for (int i = left; i <= right; i++) {
                result.add(matrix[top][i]);
            }
            // 从左到右遍历后 top加1 则判断下加1后的top会不会大于bottom，超过了结束
            if (++top > bottom) {
                break;
            }


            // 从上到下遍历
            for (int i = top; i <= bottom; i++) {
                result.add(matrix[i][right]);
            }
            // 从上到下遍历后，right减1，判断减1后的是不是小于left
            if (--right < left) {
                break;
            }

            // 从右到左
            for (int i = right; i >= left; i--) {
                result.add(matrix[bottom][i]);
            }
            // 从右到左遍历，bottom减1

            if (--bottom < top) {
                break;
            }


            // 从下到上
            for (int i = bottom; i >= top; i--) {
                result.add(matrix[i][left]);
            }
            // 从下到上 遍历 left加1

            if (++left > right) {
                break;
            }

        }

        return result;
    }

    public static void main(String[] args) {
        int[][] matrix = new int[][]{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
        System.out.println(spiralOrder(matrix));
    }
}
